#include <gtkmm.h>
#include <thread>
#include <chrono>

class MyWindow : public Gtk::Window {
public:
    MyWindow() {
        set_title("GtkProgressBar Example");  // 设置窗口标题
        set_default_size(300, 100);  // 设置窗口默认大小

        Gtk::Box* vbox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL, 10));  // 创建垂直盒子容器
        add(*vbox);  // 将盒子容器添加到窗口

        progressbar = Gtk::manage(new Gtk::ProgressBar());  // 创建进度条控件
        vbox->pack_start(*progressbar);  // 将进度条添加到盒子容器中

        // 设置进度条属性
        progressbar->set_show_text(true);  // 显示进度条文本
        progressbar->set_text("Loading...");  // 设置进度条文本

        // 创建并启动一个线程，用于模拟进度更新
        std::thread([this]() {
            for (int i = 0; i <= 100; ++i) {
                std::this_thread::sleep_for(std::chrono::milliseconds(50));  // 模拟任务执行时间
                    progressbar->set_fraction(i / 100.0);  // 更新进度值
            }
        }).detach();  // 分离线程，使其独立运行

        show_all_children();  // 显示所有子控件
    }

    virtual ~MyWindow() {}

protected:
    Gtk::ProgressBar* progressbar;  // 进度条控件指针
};

int main(int argc, char *argv[]) {
    auto app = Gtk::Application::create(argc, argv, "com.example.GtkProgressBarExample");  // 创建 GTK 应用程序实例

    MyWindow window;  // 创建主窗口实例

    return app->run(window);  // 运行应用程序
}
